from flask import Flask, request, jsonify

import business_logic
from logger_config import logger  # 导入配置好的日志记录器

app = Flask(__name__)


# 定义根路由，返回简单的 JSON 响应
@app.route("/")
def index():
    # 日志记录不同级别的信息
    return jsonify({"message": "Hello, world!"})


# 定义 /api/data 路由，处理 GET 请求，返回所有数据
@app.route("/api/data", methods=["GET"])
def get_data():
    logger.info("处理GET请求: /api/data")
    data = business_logic.fetch_all_data()
    return jsonify(data)


# 定义 /api/data/<data_id> 路由，处理 GET 请求，返回指定 ID 的数据
@app.route("/api/data/<int:data_id>", methods=["GET"])
def get_data_by_id(data_id):
    logger.info(f"处理GET请求: /api/data/{data_id}")
    try:
        data = business_logic.fetch_data_by_id(data_id)
        return jsonify(data)
    except ValueError as e:
        # 如果指定 ID 的数据不存在，返回 404 错误
        return jsonify({"error": str(e)}), 404


# 定义 /api/data/create 路由，处理 POST 请求，创建新数据
@app.route("/api/data/create", methods=["POST"])
def create_data():
    logger.info("处理POST请求: /api/data/create")
    name = request.json.get("name")
    description = request.json.get("description")
    try:
        new_data = business_logic.add_data(name, description)
        return jsonify({"message": "数据创建成功", "created_data": new_data}), 201
    except ValueError as e:
        # 如果数据创建失败，返回 400 错误
        return jsonify({"error": str(e)}), 400


# 定义 /api/data/<data_id> 路由，处理 PUT 请求，更新指定 ID 的数据
@app.route("/api/data/<int:data_id>", methods=["PUT"])
def update_data(data_id):
    logger.info(f"处理PUT请求: /api/data/{data_id}")
    name = request.json.get("name")
    description = request.json.get("description")
    try:
        updated_data = business_logic.modify_data(data_id, name, description)
        return jsonify({"message": "数据更新成功", "updated_data": updated_data})
    except ValueError as e:
        # 如果数据更新失败，返回 400 错误
        return jsonify({"error": str(e)}), 400


# 定义 /api/data/<data_id> 路由，处理 DELETE 请求，删除指定 ID 的数据
@app.route("/api/data/<int:data_id>", methods=["DELETE"])
def delete_data(data_id):
    logger.info(f"处理DELETE请求: /api/data/{data_id}")
    try:
        business_logic.remove_data(data_id)
        return jsonify({"message": "数据删除成功"})
    except ValueError as e:
        # 如果数据删除失败，返回 404 错误
        return jsonify({"error": str(e)}), 404


# 仅当脚本直接运行时，启动 Flask 应用程序
if __name__ == "__main__":
    logger.info("打印 info")
    logger.debug("打印 debug")
    logger.warning("打印 warning")
    logger.error("打印 error")
    print("打印 print")
    app.run(debug=True, port=5000)
